/**
 * 答题验证工具
 * 用于判断不同类型题目的答案是否正确
 */

/**
 * 判断答案是否正确
 * @param {Object} question - 题目对象
 * @param {String} question.questionType - 题目类型：single_choice(单选题), multiple_choice(多选题), true_false(判断题), fill_blank(填空题)
 * @param {Object} question.userAnswer - 用户答案对象
 * @param {String} question.userAnswer.answerContent - 用户答案内容
 * @param {String} question.answer - 正确答案
 * @returns {Boolean} - 返回答案是否正确
 */
const isAnswerCorrect = (question) => {
  // 如果没有用户答案或正确答案，则返回false
  if (!question.userAnswer || !question.answer) {
    return false;
  }
  
  const userAnswer = question.userAnswer.answerContent || '';
  const answer = question.answer || '';
  
  // 根据题目类型判断答案是否正确
  switch (question.questionType) {
    // 单选题：直接比较答案是否相等
    case 'single_choice':
      return userAnswer === answer;
      
    // 多选题：需要比较所有选项，顺序无关
    case 'multiple_choice':
      // 将答案转为数组并排序，然后比较
      const userOptions = userAnswer.split('').sort().join('');
      const correctOptions = answer.split('').sort().join('');
      return userOptions == correctOptions;
      
    // 判断题：直接比较答案是否相等
    case 'true_false':
      return userAnswer == answer;
      
    // 填空题：忽略大小写和首尾空格进行比较
    case 'fill_blank':
      return userAnswer.trim().toLowerCase() === answer.trim().toLowerCase();
      
    // 默认情况：未知题型，返回false
    default:
      return false;
  }
};

/**
 * 获取答案的正确性状态
 * @param {Object} question - 题目对象
 * @returns {String} - 返回答案状态：'correct'(正确), 'wrong'(错误), 'unanswered'(未答)
 */
const getAnswerStatus = (question) => {
  if (!question.userAnswer) {
    return 'unanswered';
  }
  
  return isAnswerCorrect(question) ? 'correct' : 'wrong';
};

/**
 * 格式化显示答案
 * @param {String} answer - 答案内容
 * @param {String} questionType - 题目类型
 * @returns {String} - 返回格式化后的答案
 */
const formatAnswer = (answer, questionType) => {
  if (!answer) return '';
  
  switch (questionType) {
    case 'multiple_choice':
      // 多选题答案格式化，如 'ABC' 转为 'A, B, C'
      return answer.split('').join(', ');
      
    case 'true_false':
    case 'single_choice':
    case 'fill_blank':
    default:
      // 其他题型直接返回
      return answer;
  }
};

export {
  isAnswerCorrect,
  getAnswerStatus,
  formatAnswer
};